package com.hyc.myvideo.data.api;

import com.hyc.myvideo.data.api.constants.Constants;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import rx.Observable;

/**
 * service-post
 */
public interface HttpPostService {
    /***
     * 获取短信验证码
     * @param phone 手机号
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_SMS)
    Observable<String> requestPhoneCode(@Field("user_phone") String phone);


    /***
     * 支付
     * @param u_id
     * @param token
     * @param payState 支付类型 1=充值,2=vip购买
     * @param payType  支付方式: alipay,wechat,unionpay
     * @param id       数据id
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_PAY)
    Observable<String> requestPay(@Field("user_id") String u_id,
                                  @Field("user_token") String token,
                                  @Field("pay_state") int payState,
                                  @Field("pay_type") String payType,
                                  @Field("parame_id") String id);

    /***
     * 登录
     * @param phone    账号
     * @param password 密码
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_LOGIN)
    Observable<String> requestLogin(@Field("user_phone") String phone,@Field("user_password") String password);


    /***
     * 第三方登录
     * @param uid     用户唯一标识
     * @param name    用户昵称
     * @param iconurl 用户头像
     * @param type    登录类型
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_LOGIN_TRIPARTITE)
    Observable<String> requestLoginTripartite(
            @Field("there_key") String uid,
            @Field("there_name") String name,
             @Field("there_face") String iconurl,
            @Field("there_type") int type
    );

    /***
     * 注册
     * @param phone    手机号
     * @param password 密码
     * @param code     短信验证码
     * @param invitation 邀请码
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_REG)
    Observable<String> requestRegistered(
            @Field("user_phone") String phone,
            @Field("user_password") String password,
            @Field("code") String code,
            @Field("invite_phone") String invitation
    );

    /***
     * 获取用户信息
     * @param u_id
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USERINFO)
    Observable<String> requestUserInfo(@Field("user_id") String u_id,@Field("user_token") String token);

    /***
     * 修改昵称
     * @param u_id   用户id
     * @param token   用户token
     * @param nickname 修改的昵称
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_UPDATE_NICKNAME)
    Observable<String> requestUpdataNickname(@Field("user_id") String u_id,@Field("user_token") String token,@Field("user_nickname") String nickname);

    /***
     * 修改手机号
     * @param u_id
     * @param token
     * @param phone
     * @param code
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_UPDATE_PHONE)
    Observable<String> requestUpdataPhone(@Field("user_id") String u_id,@Field("user_token") String token,@Field("user_phone") String phone,@Field("code") String code);


    /***
     * 找回密码
     * @param phone
     * @param code
     * @param password
     * @param confirm_password
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_PASSWPRD)
    Observable<String> requestUserPw(
            @Field("user_phone") String phone,
            @Field("code") String code,
            @Field("user_password") String password,
            @Field("password") String confirm_password);


    /***
     * 第三方登录 绑定手机号
     * @param phone 手机号
     * @param code  短信验证码
     * @param there_user_id 授权用户信息id
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_BIND_PHONE)
    Observable<String> requestBindPhone(@Field("user_phone") String phone,@Field("code") String code,@Field("there_login_id") String there_user_id);


    /***
     * 修改头像
     * @param u_id
     * @param token
     * @return
     */
    @Multipart
    @POST(Constants.API_USER_UPDATE_AVATAR)
    Observable<String> uploadFiles(@Part("user_id") RequestBody u_id, @Part("user_token") RequestBody token,@Part() MultipartBody.Part files);


    /***
     * VIP充值
     * @param u_id
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_RECHARGE)
    Observable<String> requestVIP(@Field("user_id") String u_id,@Field("user_token") String token);

    /***
     * 充值露珠
     * @param u_id
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_RECHARGELIST)
    Observable<String> requestDew(@Field("user_id") String u_id,@Field("user_token") String token);

    /***
     * 意见反馈
     * @param u_id
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_FEEDBACK)
    Observable<String> requestFeedback(@Field("user_id") String u_id, @Field("user_token") String token,@Field("feedback_content") String content,@Field("feedback_phone") String contact);


    /***
     * 我的购买
     * @param u_id
     * @param token
     * @param page 页数
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_ORDER)
    Observable<String> requestOrder(@Field("user_id") String u_id, @Field("user_token") String token,@Field("page") int page);

    /***
     * 我的评论列表
     * @param u_id
     * @param token
     * @param page 页数
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_COMMENT_LIST)
    Observable<String> requestCommentData(@Field("user_id") String u_id, @Field("user_token") String token,@Field("page") int page);


    /***
     * 我的报名列表
     * @param u_id
     * @param token
     * @param page 页数
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_REGISTER_LIST)
    Observable<String> requestRegisterData(@Field("user_id") String u_id, @Field("user_token") String token,@Field("page") int page);

    /***
     * 我的优惠卷
     * @param u_id
     * @param token
     * @param page 页数
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_COUPON_LIST)
    Observable<String> requestCouponData(@Field("user_id") String u_id, @Field("user_token") String token,@Field("page") int page);

    /***
     * 优惠卷转赠
     * @param u_id
     * @param token
     * @param user_bill_id 优惠卷id
     * @param phone     转赠人
     * @param count    转赠数量
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_COUPON_DONATED)
    Observable<String> requestCouponDonated(@Field("user_id") String u_id, @Field("user_token") String token,
                                            @Field("user_bill_id") String user_bill_id,@Field("user_phone") String phone,
                                            @Field("giev_count") String count);


    /***
     * 我的关注列表
     * @param u_id
     * @param token
     * @param page 页数
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_FOLLOW)
    Observable<String> requestFollowData(@Field("user_id") String u_id, @Field("user_token") String token,@Field("page") int page);

    /***
     * 我的课程列表
     * @param u_id
     * @param token
     * @param page  页数
     * @param state  0未完成,1已经完成
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_DIRECT)
    Observable<String> requestDirectData(@Field("user_id") String u_id, @Field("user_token") String token,@Field("page") int page,@Field("direct_state") int state);

    /***
     * 我的课程详情列表
     * @param u_id
     * @param token
     * @param page  页数
     * @param d_id  课程id
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_DIRECT_HOUR)
    Observable<String> requestDirectHourData(@Field("user_id") String u_id, @Field("user_token") String token,@Field("page") int page,@Field("direct_id") String d_id);


    /***
     * 我的佣金
     * @param u_id
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_COMMISSION)
    Observable<String> requestCommissionData(@Field("user_id") String u_id, @Field("user_token") String token);

    /***
     * 我的佣金详情
     * @param u_id
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_COMMISSION_DETAILS)
    Observable<String> requestCommissionDeiailsData(@Field("user_id") String u_id, @Field("user_token") String token,@Field("page") int page);

    /***
     *
     * @param u_id
     * @param token
     * @param page
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_STATISTICS_MEMBER)
    Observable<String> requestStatisticsData(@Field("user_id") String u_id, @Field("user_token") String token,@Field("page") int page);

    /***
     * 统计-提成列表
     * @param u_id
     * @param token
     * @param page
     * @return
     */
    @FormUrlEncoded
    @POST(Constants.API_USER_STATISTICS_COMMISSION)
    Observable<String> requestCommissionData(@Field("user_id") String u_id, @Field("user_token") String token,@Field("page") int page);



    /**================================================================================================*/
    /**
     * 获取专栏列表
     *
     * @param column_type 专栏类型 （1=名师机构,2=课程）
     */
    @FormUrlEncoded() @POST(Constants.API_COLUMN) Observable<String> getColumnList(
            @Field("column_type") String column_type,@Field("page") int page);

    /**
     * 获取专栏详情
     */
    @FormUrlEncoded() @POST(Constants.API_COLUMN_DETAILS) Observable<String> getColumnDetails(
            @Field("column_id") String column_id);

    /**
     * 专栏详情 报名
     * @param user_id user_id
     * @param column_id column_id
     * @return
     */
    @FormUrlEncoded() @POST(Constants.API_COLUMN_ENROLL) Observable<String> postColumnSignUp(
            @Field("user_id") String user_id,@Field("column_id") String column_id);

    /**
     * 获取首页数据
     */
    //@FormUrlEncoded()
    @POST("/") Observable<String> getHomeList();

    /**
     * 获取推荐课程列表
     *
     * @param curriculum_class_id id
     * @param page 页码
     * @param curriculum_charge_state 0=免费，1=vip,2=收费
     */
    @FormUrlEncoded() @POST(Constants.API_CURRICULUM) Observable<String> getHomeClassList(
            @Field("curriculum_class_id") String curriculum_class_id, @Field("page") int page,
            @Field("curriculum_charge_state") String curriculum_charge_state);

    /**
     * 获取系列列表
     * @param curriculum_id id
     * @return
     */
    @FormUrlEncoded() @POST(Constants.API_CURRICULUM_HOUR) Observable<String> getHomeClassHourList(
            @Field("curriculum_id") String curriculum_id);

    /**
     * 课时详情
     * @param curriculum_hour_id id
     * @return
     */
    @FormUrlEncoded() @POST(Constants.API_CURRICULUM_HOUR_DETAILS) Observable<String> getHomeClassHourDetails(
            @Field("curriculum_hour_id") String curriculum_hour_id);

  /**
   * 课时详情 评论列表
   * @param curriculum_hour_id id
   * @param page page
   * @return
   */
  @FormUrlEncoded() @POST(Constants.API_CURRICULUM_HOUR_COMMENT_LIST)
  Observable<String> getHomeClassHourCommentList(
      @Field("curriculum_hour_id") String curriculum_hour_id, @Field("page") int page);

    /**
     * 课时详情 发布评论
     * @param user_id user_id
     * @param curriculum_hour_id 课时id
     * @param comment_content 评论内容
     * @return
     */
  @FormUrlEncoded() @POST(Constants.API_SET_CURRICULUM_HOUR)
  Observable<String> publishClassComment(@Field("user_id") String user_id,
      @Field("curriculum_hour_id") String curriculum_hour_id, @Field("comment_content") String comment_content);

    /**
     *  课时记录添加
     * @param user_id user_id
     * @param curriculum_hour_id 课时id
     * @param practice_record_hour 时长
     * @return
     */
  @FormUrlEncoded() @POST(Constants.API_PRACTICE_SET_USER_PRACTICE_RECORD)
  Observable<String> setUserPracticeRecord(@Field("user_id") String user_id,
      @Field("curriculum_hour_id") String curriculum_hour_id, @Field("practice_record_hour") String practice_record_hour);

    /**
     * 获取修炼目录
     * @param user_id user_id
     * @return
     */
  @FormUrlEncoded() @POST(Constants.API_PRACTICE)
  Observable<String> getPracticeList(@Field("user_id") String user_id);

    /**
     * 修炼目录 添加目录
     * @param user_id user_id
     * @param catelog_name 目录名称
     * @return
     */
  @FormUrlEncoded() @POST(Constants.API_PRACTICE_SET_PRACTICE_CATELOG)
  Observable<String> setPracticeCatalog(@Field("user_id") String user_id,@Field("catelog_name") String catelog_name);

    /**
     * 获取修炼记录
     * @param user_id user_id
     * @param page page
     * @return
     */
  @FormUrlEncoded() @POST(Constants.API_PRACTICE_RECORD)
  Observable<String> getPracticeRecord(@Field("user_id") String user_id,@Field("page") int page);

    /**
     * 修炼目录 添加课程
     * @param user_id user_id
     * @param catelog_id 目录id
     * @param curriculum_id 课程id
     * @return
     */
  @FormUrlEncoded() @POST(Constants.API_PRACTICE_SET_CATELOG_CURRICULUM)
  Observable<String> setPracticeCatelogCurriculum(@Field("user_id") String user_id,@Field("catelog_id") String catelog_id,@Field("curriculum_id") String curriculum_id);

    /**
     * 修炼目录 课程列表
     * @param user_id user_id
     * @param catelog_id 目录id
     * @param page page
     * @return
     */
  @FormUrlEncoded() @POST(Constants.API_PRACTICE_CATELOG_CURRICULUM_LIST)
  Observable<String> getPracticeCatelogCurriculumList(@Field("user_id") String user_id,@Field("catelog_id") String catelog_id,@Field("page") int page);

    /**
     * 购买详情
     * @param user_id user_id
     * @param parame_id 参数id（课程id/直播课程id）
     * @param pay_state 3=课程购买,4=直播购买
     * @return
     */
  @FormUrlEncoded() @POST(Constants.API_PAY_DETAILS)
  Observable<String> getPayDetails(@Field("user_id") String user_id,@Field("parame_id") String parame_id,@Field("pay_state") int pay_state);
}
